// https://leetcode.cn/problems/contiguous-array/
// class Solution {
// public:
//     int findMaxLength(vector<int>& nums) {
//         // 把 0 变成 -1转化为和为 0的最长子数组
//         // 前面有一道题和这个类似，就是找一个和为k的子数组的个数，依然利用余数
//         // 如果余数相同 那么其实就是相当于（假如下标a从0到a的和除K的余数和下标b
//         // 从 0到b和除K的余数相同 那么就证明两个数之间相差了一个K）
//         int ret = -1; // 相当于一个指针
//         int left = -2;
//         unordered_map<int, int> hash;
//         int sum = 0;
//         int result = 0;
//         hash[0]=-1;
//         for (auto x : nums) {

//             if (x == 0) {
//                 sum += -1;
//             } else {
//                 sum += 1;
//             }
//             ret++;
//             if (hash.find(sum) != hash.end()) {
//                 int m = hash[sum];
//                 result = max(result, ret - m);
//             }
//             else
//             {hash[sum] = ret;}
//         }
//         return result;
//     }
// };